import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;


public class Fichier {
	/**
	 * variable permettant de donner un nom de fichier, pour lire le fichier afin de creer le graphe 
	 */
	String fichier;
	
	/**
	 * Constructeur
	 * @param fichier le fichier pour la lecture pour construire le graphe
	 */
	public Fichier(String fichier) {
		this.fichier=fichier;
	}
	/**
	 * Methode permettant de creer le graphe a partir d'un fichier texte
	 * @return le graphe a partir du ficheir
	 */
	public Graphe formationGraphe() {
		Graphe res = new Graphe();
		// entier permettant de donner les erreurs du fichier ( a la ligne pres )
		int nbLigne=0;
		int nbSommets;
		String ligne;
		try{
			InputStream ips=new FileInputStream(fichier); 
			InputStreamReader ipsr=new InputStreamReader(ips);
			BufferedReader br=new BufferedReader(ipsr);
			while ((ligne=br.readLine())!=null) {
				if(nbLigne==0) {
					try {
						nbSommets=new Integer(ligne);
						nbLigne++;
						for(int i=1;i<=nbSommets;i++)
							res.addSommet(new Sommet(i));
					}
					catch (NumberFormatException e){
						System.out.println("Erreur ligne "+(ligne+1)+"entier demande");
					}
				}
				else {
					String[] split=ligne.split(" ");
					try {
						//tester si les nombres sont bien strictement inferieur au premier nombre donne
						int x = new Integer(split[0]);
						int y = new Integer(split[2]);
						if(x>res.getV().size()) {
							System.out.println("Erreur ligne "+(nbLigne+1)+": Sommet "+x+" introuvable");
							System.exit(1);
						}
						if(!split[1].equals("->")) {
							System.out.println("Erreur ligne "+(nbLigne+1)+" : symbole \"->\" attendu");
							System.exit(1);
						}
						if(y>res.getV().size()) {
							System.out.println("Erreur ligne "+(nbLigne+1)+": Sommet "+y+" introuvable");
							System.exit(1);
						}
						
						res.getSommet(x).addSuccesseur(res.getSommet(y));
						res.getSommet(y).addPredecesseur(res.getSommet(x));
					}
					catch (NumberFormatException e){}
				}
			}
			br.close(); 
		}		
		catch (Exception e){
			System.out.println("Erreur de fichier");
			return null;
		}
		
		
		return res;
	}
}
